home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / v7n13.arc / MERGE.C < prev    next >
C/C++ Source or Header  |  1988-05-18  |  3KB  |  104 lines

  1.  
  2. /* merge.c
  3.  * DESCRIPTION: merges a 'c' source file with an asm file
  4.  */
  5.  
  6. #include <stdio.h>
  7.  
  8. #define LINEBUFFER 200                     /* length of input line */
  9. #define NAMESIZE 80                        /* DOS file/path length */
  10.  
  11. FILE *p_to_c, *p_to_asm, *p_to_mer;        /* declare file pointers */
  12. char line_buffer[LINEBUFFER];              /* line buffer */
  13.                                            /* file name buffers */
  14. char file_c[NAMESIZE], file_asm[NAMESIZE], file_mer[NAMESIZE];
  15.  
  16. main(argc,argv)
  17. int argc;
  18. char *argv[];
  19. {
  20.    int line_count, run_count = 0;
  21.  
  22.    if (argc != 2)
  23.        help_me();                  /* print the usage message */
  24.  
  25.    strcpy(file_c,argv[1]);         /* setup the .C filename */
  26.    strcat(file_c,".c");
  27.    
  28.    if(!(p_to_c = fopen(file_c,"r")))       /* open the .C file */
  29.        file_error(file_c);
  30.  
  31.    strcpy(file_asm,argv[1]);           /* setup the .ASM filename */
  32.    strcat(file_asm,".asm");
  33.  
  34.    if(!(p_to_asm = fopen(file_asm,"r")))   /* open the .ASM file */
  35.        file_error(file_asm);
  36.  
  37.    strcpy(file_mer,argv[1]);           /* setup the .MER filename  */
  38.    strcat(file_mer,".mer");
  39.    
  40.    if(!(p_to_mer = fopen(file_mer,"w")))   /* open the .MER file */
  41.        file_error(file_mer);
  42.  
  43.                            /* read each line of the .ASM file */
  44.    while (fgets(line_buffer,LINEBUFFER,p_to_asm) )
  45.    {
  46.        if(strncmp(line_buffer,"; Line",6))/* if "; Line" not found */
  47.        {
  48.            fputs(line_buffer,p_to_mer);    /* write it to merge file */
  49.            continue;                   /* get next line */
  50.        }
  51.                                    /* "; Line" was found */
  52.        line_count = atoi( &line_buffer[7] );   /* generate a line count */
  53.  
  54.        if(run_count < line_count)      /* if backlog in .C file */
  55.            for( ; run_count < line_count; run_count++)
  56.                write_merge_line();     /* write the lines and catch up */
  57.        else
  58.        {
  59.            write_merge_line();         /* write corresponding C line */
  60.            run_count++;
  61.        }
  62.    }
  63.    fclose(p_to_c);                 /* close all files */
  64.    fclose(p_to_asm);
  65.    fclose(p_to_mer);
  66. }
  67.  
  68. /* write_merge_line()
  69.  *  reads a line from the C source, and writes it out preceded by
  70.  *  a ';'
  71.  */
  72. write_merge_line()
  73. {
  74.    fgets(line_buffer,LINEBUFFER,p_to_c);   /* get .C file line */
  75.    fputs("; ",p_to_mer);                   /* write ';' to merge file */
  76.    fputs(line_buffer,p_to_mer);            /* put .C line after it */
  77. }
  78.  
  79. /* help_me
  80.  * DESCRIPTION: prints out the title and usage
  81.  */
  82.  
  83. help_me()
  84. {
  85.    printf("MERGE: a program to merge a 'c' source file and an ASM file\n");
  86.    printf("USAGE: merge filename \n");
  87.    printf("where filename is the name of the files to merge\n");
  88.    printf("Do not type in the period or extension.\n");
  89.    exit(0);
  90. }
  91.  
  92. /* file_error
  93.  * DESCRIPTION: prints out error message and name of the
  94.  *               file that could not be opened
  95.  */
  96.  
  97. file_error(name)
  98. char *name;
  99. {
  100.    printf("MERGE: ERROR IN OPENING FILE: %s \n",name);
  101.    exit(0);
  102. }
  103.  
  104.